<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>LZWDecompresser (POI API Documentation)</title>
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="LZWDecompresser (POI API Documentation)";
    }
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!--   -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/LZWDecompresser.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/poi/util/LongField.html" title="class in org.apache.poi.util"><span class="strong">PREV CLASS</span></a></li>
<li><a href="../../../../org/apache/poi/util/MethodUtils.html" title="class in org.apache.poi.util"><span class="strong">NEXT CLASS</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/poi/util/LZWDecompresser.html" target="_top">FRAMES</a></li>
<li><a href="LZWDecompresser.html" target="_top">NO FRAMES</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>SUMMARY:&nbsp;</li>
<li>NESTED&nbsp;|&nbsp;</li>
<li>FIELD&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">CONSTR</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">METHOD</a></li>
</ul>
<ul class="subNavList">
<li>DETAIL:&nbsp;</li>
<li>FIELD&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">CONSTR</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">METHOD</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<p class="subTitle">org.apache.poi.util</p>
<h2 title="Class LZWDecompresser" class="title">Class LZWDecompresser</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.poi.util.LZWDecompresser</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../../../org/apache/poi/hmef/CompressedRTF.html" title="class in org.apache.poi.hmef">CompressedRTF</a>, <a href="../../../../org/apache/poi/hdgf/HDGFLZW.html" title="class in org.apache.poi.hdgf">HDGFLZW</a></dd>
</dl>
<hr>
<br>
<pre>public abstract class <strong>LZWDecompresser</strong>
extends java.lang.Object</pre>
<div class="block">This class provides common functionality for the
  various LZW implementations in the different file
  formats.
 It's currently used by HDGF and HMEF.

 Two good resources on LZW are:
  http://en.wikipedia.org/wiki/LZW
  http://marknelson.us/1989/10/01/lzw-data-compression/</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!--   -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier</th>
<th class="colLast" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected </code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/poi/util/LZWDecompresser.html#LZWDecompresser(boolean, int, boolean)">LZWDecompresser</a></strong>(boolean&nbsp;maskMeansCompressed,
               int&nbsp;codeLengthIncrease,
               boolean&nbsp;positionIsBigEndian)</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected abstract int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/poi/util/LZWDecompresser.html#adjustDictionaryOffset(int)">adjustDictionaryOffset</a></strong>(int&nbsp;offset)</code>
<div class="block">Adjusts the position offset if needed when looking
  something up in the dictionary.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>byte[]</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/poi/util/LZWDecompresser.html#decompress(java.io.InputStream)">decompress</a></strong>(java.io.InputStream&nbsp;src)</code>
<div class="block">Decompresses the given input stream, returning the array of bytes
  of the decompressed input.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/poi/util/LZWDecompresser.html#decompress(java.io.InputStream, java.io.OutputStream)">decompress</a></strong>(java.io.InputStream&nbsp;src,
          java.io.OutputStream&nbsp;res)</code>
<div class="block">Perform a streaming decompression of the input.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/poi/util/LZWDecompresser.html#fromByte(byte)">fromByte</a></strong>(byte&nbsp;b)</code>
<div class="block">Given a java byte, turn it into an integer between 0
  and 255 (i.e.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static byte</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/poi/util/LZWDecompresser.html#fromInt(int)">fromInt</a></strong>(int&nbsp;b)</code>
<div class="block">Given an integer, turn it into a java byte, handling
  the wrapping.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected abstract int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/poi/util/LZWDecompresser.html#populateDictionary(byte[])">populateDictionary</a></strong>(byte[]&nbsp;dict)</code>
<div class="block">Populates the dictionary, and returns where in it
  to begin writing new codes.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!--   -->
</a>
<h3>Constructor Detail</h3>
<a name="LZWDecompresser(boolean, int, boolean)">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>LZWDecompresser</h4>
<pre>protected&nbsp;LZWDecompresser(boolean&nbsp;maskMeansCompressed,
               int&nbsp;codeLengthIncrease,
               boolean&nbsp;positionIsBigEndian)</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="populateDictionary(byte[])">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>populateDictionary</h4>
<pre>protected abstract&nbsp;int&nbsp;populateDictionary(byte[]&nbsp;dict)</pre>
<div class="block">Populates the dictionary, and returns where in it
  to begin writing new codes.
 Generally, if the dictionary is pre-populated, then new
  codes should be placed at the end of that block.
 Equally, if the dictionary is left with all zeros, then
  usually the new codes can go in at the start.</div>
</li>
</ul>
<a name="adjustDictionaryOffset(int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>adjustDictionaryOffset</h4>
<pre>protected abstract&nbsp;int&nbsp;adjustDictionaryOffset(int&nbsp;offset)</pre>
<div class="block">Adjusts the position offset if needed when looking
  something up in the dictionary.</div>
</li>
</ul>
<a name="decompress(java.io.InputStream)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>decompress</h4>
<pre>public&nbsp;byte[]&nbsp;decompress(java.io.InputStream&nbsp;src)
                  throws java.io.IOException</pre>
<div class="block">Decompresses the given input stream, returning the array of bytes
  of the decompressed input.</div>
<dl><dt><span class="strong">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd></dl>
</li>
</ul>
<a name="decompress(java.io.InputStream, java.io.OutputStream)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>decompress</h4>
<pre>public&nbsp;void&nbsp;decompress(java.io.InputStream&nbsp;src,
              java.io.OutputStream&nbsp;res)
                throws java.io.IOException</pre>
<div class="block">Perform a streaming decompression of the input.
 Works by:
 1) Reading a flag byte, the 8 bits of which tell you if the
     following 8 codes are compressed our un-compressed
 2) Consider the 8 bits in turn
 3) If the bit is set, the next code is un-compressed, so
     add it to the dictionary and output it
 4) If the bit isn't set, then read in the length and start
     position in the dictionary, and output the bytes there
 5) Loop until we've done all 8 bits, then read in the next
     flag byte</div>
<dl><dt><span class="strong">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd></dl>
</li>
</ul>
<a name="fromInt(int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>fromInt</h4>
<pre>public static&nbsp;byte&nbsp;fromInt(int&nbsp;b)</pre>
<div class="block">Given an integer, turn it into a java byte, handling
  the wrapping.
 This is a convenience method</div>
</li>
</ul>
<a name="fromByte(byte)">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>fromByte</h4>
<pre>public static&nbsp;int&nbsp;fromByte(byte&nbsp;b)</pre>
<div class="block">Given a java byte, turn it into an integer between 0
  and 255 (i.e. handle the unwrapping).
 This is a convenience method</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!--   -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/LZWDecompresser.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/poi/util/LongField.html" title="class in org.apache.poi.util"><span class="strong">PREV CLASS</span></a></li>
<li><a href="../../../../org/apache/poi/util/MethodUtils.html" title="class in org.apache.poi.util"><span class="strong">NEXT CLASS</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/poi/util/LZWDecompresser.html" target="_top">FRAMES</a></li>
<li><a href="LZWDecompresser.html" target="_top">NO FRAMES</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>SUMMARY:&nbsp;</li>
<li>NESTED&nbsp;|&nbsp;</li>
<li>FIELD&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">CONSTR</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">METHOD</a></li>
</ul>
<ul class="subNavList">
<li>DETAIL:&nbsp;</li>
<li>FIELD&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">CONSTR</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">METHOD</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>
                <i>Copyright 2014 The Apache Software Foundation or
        its licensors, as applicable.</i>
            </small></p>
</body>
</html>
